package com.zenithmind.coding.service;

/**
 * 代码格式化服务接口 - 遵循接口隔离原则，专门处理代码格式化相关功能
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface CodeFormatterService {

    /**
     * 格式化代码
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 格式化后的代码
     */
    String formatCode(String language, String sourceCode);

    /**
     * 美化代码
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @param options 格式化选项
     * @return 美化后的代码
     */
    String beautifyCode(String language, String sourceCode, String options);

    /**
     * 压缩代码
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 压缩后的代码
     */
    String minifyCode(String language, String sourceCode);

    /**
     * 验证代码格式
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 是否格式正确
     */
    Boolean validateFormat(String language, String sourceCode);

    /**
     * 获取格式化选项
     * 
     * @param language 编程语言
     * @return 格式化选项
     */
    Object getFormattingOptions(String language);

    /**
     * 设置格式化选项
     * 
     * @param language 编程语言
     * @param options 格式化选项
     * @return 是否成功
     */
    Boolean setFormattingOptions(String language, Object options);

    /**
     * 获取支持的格式化器
     * 
     * @return 格式化器列表
     */
    String[] getSupportedFormatters();

    /**
     * 检查格式化器支持
     * 
     * @param language 编程语言
     * @return 是否支持
     */
    Boolean isFormatterSupported(String language);

    /**
     * 自动修复代码格式
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 修复后的代码
     */
    String autoFixFormat(String language, String sourceCode);

    /**
     * 检查代码风格一致性
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @param styleGuide 风格指南
     * @return 一致性检查结果
     */
    Object checkStyleConsistency(String language, String sourceCode, String styleGuide);

    /**
     * 应用代码风格
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @param styleGuide 风格指南
     * @return 应用风格后的代码
     */
    String applyCodeStyle(String language, String sourceCode, String styleGuide);

    /**
     * 获取代码风格建议
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 风格建议
     */
    Object getStyleSuggestions(String language, String sourceCode);
}
